// 测试myPromise
/*
  1. Promise就是一个类, 在执行的时候 需要传递一个执行器进去，执行器会立即执行
  2. Promise的三种状态。成功-fulfilled, 失败-rejected, 等待-pending
     仅有两种状态转换：
      01. pending -> fulfilled
      02. pending -> rejected
  3. resolve函数用来改变为成功状态：pending -> fulfilled
     reject函数用来改变为失败状态：pending -> rejected
     *** 状态一旦修改，不可再改！

   4.then方法做的事情就是【判断状态】，如果成功状态，则调用第一个参数(函数)，如果失败状态，则调用第二个参数(函数)
      then是被定义在原型对象中的，在对象的原型对象中定义函数then的写法: then(){} ; 非箭头函数
      then的两个参数(函数)，都有参数，分别为成功的数据，以及失败的原因
 * */

const MyPromise = require("./myPromise11");
const p = new MyPromise((resolve, reject) => {
  setTimeout(() => {
    resolve('成功...'); // ***修改状态***
    // reject('失败...');
  }, 2000);
});


// then中第二个参数接收失败消息！！！


// 重点：
// p.then(value => {
//   console.log(value)
// },reason=>{
//   return 10000; //  返回普通值，直接进入then的成功回调！！！！！！！！！！！！！
// }).then(v=>{console.log(v)},r=>{console.log("--->",r);});



// p.then(value => {
//   return '222'
// },reason=>{
//   return 10000; //  返回普通值，直接进入then的成功回调！！！！！！！！！！！！！
// }).then(v=>{console.log(v)},r=>{console.log("--->",r);});



// MyPromise.all([1,2,p,3]).then((v)=>{console.log(v)},(r)=>{console.log("r:",r)});



// const pro = new MyPromise((resolve,reject)=>{
//   resolve('success')
// });
// MyPromise.resolve(222).then((v)=>{console.log("vv:",v)})
// const y = MyPromise.resolve(pro)
// y.then((v)=>{console.log("vv3:",v)})



const p2 = new MyPromise((resolve,reject)=>{
  reject("s");
})
p2.then((v)=>{}).catch((r)=>{console.log(r)})